
package com.loan.rebate.application.entity;

import java.math.BigDecimal;
import java.util.Date;

import org.apache.commons.lang3.StringUtils;

import com.loan.rebate.sensitiveword.SensitiveWordUtils;

/**
 * 平台交易信息实体类
 *
 * @author 朱国军
 * @version 2017年08月06日 朱国军
 */
public class LoanApplicationVO {
    
    /** 借款申请ID */
    private String loanApplicationId;
    
    /** 平台Id */
    private String platformId;
    
    /** 项目名称 */
    private String platformName;
    
    /** 成交金额 */
    private String applicationName;
    
    /** 募集开始时间 */
    private String applicationPhone;
    
    /** 募集结束时间 */
    private String applicationWechartNo;
    
    /** 邀请人微信号 */
    private String investWechartNo;
    
    /** 实际借款利率x1000 */
    private BigDecimal realLoanRate;
    
    /** 实际还款方式 */
    private Integer realRepaymentMethod;
    
    /** 实际借款金额 */
    private BigDecimal realLoanAmount;
    
    /** 实际借款期限 */
    private Integer realLoanPeriod;
    
    /** 实际借款期限类型：1月，2天，3年 */
    private Integer realPeriodType;
    
    /** 处理状态（1，已申请，2已联系，3，借款成功，4、借款失败，5、已返利） */
    private Integer processStatus;
    
    /** 返利金额 */
    private BigDecimal rebateAmount;
    
    /** 返利时间 */
    private Date rebateTime;
    
    /** 是否有本地社保 */
    private Integer hasShebao;
    
    /** 是否有本地公积金 */
    private Integer hasGongjijing;
    
    /** 名下房产 */
    private Integer ownHouseType;
    
    /** 名下汽车 */
    private Integer ownCarType;
    
    /** 职业身份 */
    private Integer jobType;
    
    /** 发布人 */
    private String createUser;
    
    /** 更新时间 */
    private Date updateTime;
    
    /** 创建时间 */
    private Date createTime;
    
    /** 状态：0默认，1管理员删除，2用户删除 */
    private Integer dataStatus;
    
    /**
     * 设置借款申请ID
     *
     * @param loanApplicationId 借款申请ID
     */
    public void setLoanApplicationId(String loanApplicationId) {
        this.loanApplicationId = loanApplicationId;
    }
    
    /**
     * 获取借款申请ID
     *
     * @return 借款申请ID
     */
    public String getLoanApplicationId() {
        return loanApplicationId;
    }
    
    /**
     * 设置平台Id
     *
     * @param platformId 平台Id
     */
    public void setPlatformId(String platformId) {
        this.platformId = platformId;
    }
    
    /**
     * 获取平台Id
     *
     * @return 平台Id
     */
    public String getPlatformId() {
        return platformId;
    }
    
    /**
     * 设置项目名称
     *
     * @param platformName 项目名称
     */
    public void setPlatformName(String platformName) {
        this.platformName = platformName;
    }
    
    /**
     * 获取项目名称
     *
     * @return 项目名称
     */
    public String getPlatformName() {
        return platformName;
    }
    
    /**
     * 设置成交金额
     *
     * @param applicationName 成交金额
     */
    public void setApplicationName(String applicationName) {
        this.applicationName = applicationName;
    }
    
    /**
     * 获取成交金额
     *
     * @return 成交金额
     */
    public String getApplicationName() {
        return applicationName;
    }
    
    /**
     * 设置募集开始时间
     *
     * @param applicationPhone 募集开始时间
     */
    public void setApplicationPhone(String applicationPhone) {
        this.applicationPhone = applicationPhone;
    }
    
    /**
     * 获取募集开始时间
     *
     * @return 募集开始时间
     */
    public String getApplicationPhone() {
        return applicationPhone;
    }
    
    /**
     * 设置募集结束时间
     *
     * @param applicationWechartNo 募集结束时间
     */
    public void setApplicationWechartNo(String applicationWechartNo) {
        this.applicationWechartNo = applicationWechartNo;
    }
    
    /**
     * 获取募集结束时间
     *
     * @return 募集结束时间
     */
    public String getApplicationWechartNo() {
        return applicationWechartNo;
    }
    
    /**
     * 设置邀请人微信号
     *
     * @param investWechartNo 邀请人微信号
     */
    public void setInvestWechartNo(String investWechartNo) {
        this.investWechartNo = investWechartNo;
    }
    
    /**
     * 获取邀请人微信号
     *
     * @return 邀请人微信号
     */
    public String getInvestWechartNo() {
        return investWechartNo;
    }
    
    /**
     * 设置实际借款利率x1000
     *
     * @param realLoanRate 实际借款利率x1000
     */
    public void setRealLoanRate(BigDecimal realLoanRate) {
        this.realLoanRate = realLoanRate;
    }
    
    /**
     * 获取实际借款利率x1000
     *
     * @return 实际借款利率x1000
     */
    public BigDecimal getRealLoanRate() {
        return realLoanRate;
    }
    
    /**
     * 设置实际还款方式
     *
     * @param realRepaymentMethod 实际还款方式
     */
    public void setRealRepaymentMethod(Integer realRepaymentMethod) {
        this.realRepaymentMethod = realRepaymentMethod;
    }
    
    /**
     * 获取实际还款方式
     *
     * @return 实际还款方式
     */
    public Integer getRealRepaymentMethod() {
        return realRepaymentMethod;
    }
    
    /**
     * 设置实际借款金额
     *
     * @param realLoanAmount 实际借款金额
     */
    public void setRealLoanAmount(BigDecimal realLoanAmount) {
        this.realLoanAmount = realLoanAmount;
    }
    
    /**
     * 获取实际借款金额
     *
     * @return 实际借款金额
     */
    public BigDecimal getRealLoanAmount() {
        return realLoanAmount;
    }
    
    /**
     * 设置实际借款期限
     *
     * @param realLoanPeriod 实际借款期限
     */
    public void setRealLoanPeriod(Integer realLoanPeriod) {
        this.realLoanPeriod = realLoanPeriod;
    }
    
    /**
     * 获取实际借款期限
     *
     * @return 实际借款期限
     */
    public Integer getRealLoanPeriod() {
        return realLoanPeriod;
    }
    
    /**
     * 设置实际借款期限类型：1月，2天，3年
     *
     * @param realPeriodType 实际借款期限类型：1月，2天，3年
     */
    public void setRealPeriodType(Integer realPeriodType) {
        this.realPeriodType = realPeriodType;
    }
    
    /**
     * 获取实际借款期限类型：1月，2天，3年
     *
     * @return 实际借款期限类型：1月，2天，3年
     */
    public Integer getRealPeriodType() {
        return realPeriodType;
    }
    
    /**
     * 设置处理状态（1，已申请，2已联系，3，借款成功，4、借款失败，5、已返利）
     *
     * @param processStatus 处理状态（1，已申请，2已联系，3，借款成功，4、借款失败，5、已返利）
     */
    public void setProcessStatus(Integer processStatus) {
        this.processStatus = processStatus;
    }
    
    /**
     * 获取处理状态（1，已申请，2已联系，3，借款成功，4、借款失败，5、已返利）
     *
     * @return 处理状态（1，已申请，2已联系，3，借款成功，4、借款失败，5、已返利）
     */
    public Integer getProcessStatus() {
        return processStatus;
    }
    
    /**
     * 设置返利金额
     *
     * @param rebateAmount 返利金额
     */
    public void setRebateAmount(BigDecimal rebateAmount) {
        this.rebateAmount = rebateAmount;
    }
    
    /**
     * 获取返利金额
     *
     * @return 返利金额
     */
    public BigDecimal getRebateAmount() {
        return rebateAmount;
    }
    
    /**
     * 设置返利时间
     *
     * @param rebateTime 返利时间
     */
    public void setRebateTime(Date rebateTime) {
        this.rebateTime = rebateTime;
    }
    
    /**
     * 获取返利时间
     *
     * @return 返利时间
     */
    public Date getRebateTime() {
        return rebateTime;
    }
    
    /**
     * 设置是否有本地社保
     *
     * @param hasShebao 是否有本地社保
     */
    public void setHasShebao(Integer hasShebao) {
        this.hasShebao = hasShebao;
    }
    
    /**
     * 获取是否有本地社保
     *
     * @return 是否有本地社保
     */
    public Integer getHasShebao() {
        return hasShebao;
    }
    
    /**
     * 设置是否有本地公积金
     *
     * @param hasGongjijing 是否有本地公积金
     */
    public void setHasGongjijing(Integer hasGongjijing) {
        this.hasGongjijing = hasGongjijing;
    }
    
    /**
     * 获取是否有本地公积金
     *
     * @return 是否有本地公积金
     */
    public Integer getHasGongjijing() {
        return hasGongjijing;
    }
    
    /**
     * 设置名下房产
     *
     * @param ownHouseType 名下房产
     */
    public void setOwnHouseType(Integer ownHouseType) {
        this.ownHouseType = ownHouseType;
    }
    
    /**
     * 获取名下房产
     *
     * @return 名下房产
     */
    public Integer getOwnHouseType() {
        return ownHouseType;
    }
    
    /**
     * 设置名下汽车
     *
     * @param ownCarType 名下汽车
     */
    public void setOwnCarType(Integer ownCarType) {
        this.ownCarType = ownCarType;
    }
    
    /**
     * 获取名下汽车
     *
     * @return 名下汽车
     */
    public Integer getOwnCarType() {
        return ownCarType;
    }
    
    /**
     * 设置职业身份
     *
     * @param jobType 职业身份
     */
    public void setJobType(Integer jobType) {
        this.jobType = jobType;
    }
    
    /**
     * 获取职业身份
     *
     * @return 职业身份
     */
    public Integer getJobType() {
        return jobType;
    }
    
    /**
     * 设置发布人
     *
     * @param createUser 发布人
     */
    public void setCreateUser(String createUser) {
        this.createUser = createUser;
    }
    
    /**
     * 获取发布人
     *
     * @return 发布人
     */
    public String getCreateUser() {
        return createUser;
    }
    
    /**
     * 设置更新时间
     *
     * @param updateTime 更新时间
     */
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    
    /**
     * 获取更新时间
     *
     * @return 更新时间
     */
    public Date getUpdateTime() {
        return updateTime;
    }
    
    /**
     * 设置创建时间
     *
     * @param createTime 创建时间
     */
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    
    /**
     * 获取创建时间
     *
     * @return 创建时间
     */
    public Date getCreateTime() {
        return createTime;
    }
    
    /**
     * 设置状态：0默认，1管理员删除，2用户删除
     *
     * @param dataStatus 状态：0默认，1管理员删除，2用户删除
     */
    public void setDataStatus(Integer dataStatus) {
        this.dataStatus = dataStatus;
    }
    
    /**
     * 获取状态：0默认，1管理员删除，2用户删除
     *
     * @return 状态：0默认，1管理员删除，2用户删除
     */
    public Integer getDataStatus() {
        return dataStatus;
    }
    
    /**
     * 检查字段长度是否超长，检查非空字段是否有值
     *
     * @return 检查提示信息，为null时表示检查通过
     */
    public String valid() {
        
        if (StringUtils.isNotBlank(loanApplicationId) && loanApplicationId.length() > 50) {
            return "借款申请ID值超长，允许输入的最大长度为：50字符";
        }
        
        if (SensitiveWordUtils.isContaintSensitiveWord(loanApplicationId, 1)) {
            return "借款申请ID中包含敏感词汇:" + SensitiveWordUtils.getSensitiveWord(loanApplicationId, 1) + "，请检查后再保存";
        }
        
        if (StringUtils.isNotBlank(platformId) && platformId.length() > 50) {
            return "平台Id值超长，允许输入的最大长度为：50字符";
        }
        
        if (SensitiveWordUtils.isContaintSensitiveWord(platformId, 1)) {
            return "平台Id中包含敏感词汇:" + SensitiveWordUtils.getSensitiveWord(platformId, 1) + "，请检查后再保存";
        }
        
        if (StringUtils.isNotBlank(platformName) && platformName.length() > 100) {
            return "项目名称值超长，允许输入的最大长度为：100字符";
        }
        
        if (SensitiveWordUtils.isContaintSensitiveWord(platformName, 1)) {
            return "项目名称中包含敏感词汇:" + SensitiveWordUtils.getSensitiveWord(platformName, 1) + "，请检查后再保存";
        }
        
        if (StringUtils.isNotBlank(applicationName) && applicationName.length() > 50) {
            return "成交金额值超长，允许输入的最大长度为：50字符";
        }
        
        if (SensitiveWordUtils.isContaintSensitiveWord(applicationName, 1)) {
            return "成交金额中包含敏感词汇:" + SensitiveWordUtils.getSensitiveWord(applicationName, 1) + "，请检查后再保存";
        }
        
        if (StringUtils.isNotBlank(applicationPhone) && applicationPhone.length() > 30) {
            return "募集开始时间值超长，允许输入的最大长度为：30字符";
        }
        
        if (SensitiveWordUtils.isContaintSensitiveWord(applicationPhone, 1)) {
            return "募集开始时间中包含敏感词汇:" + SensitiveWordUtils.getSensitiveWord(applicationPhone, 1) + "，请检查后再保存";
        }
        
        if (StringUtils.isNotBlank(applicationWechartNo) && applicationWechartNo.length() > 100) {
            return "募集结束时间值超长，允许输入的最大长度为：100字符";
        }
        
        if (SensitiveWordUtils.isContaintSensitiveWord(applicationWechartNo, 1)) {
            return "募集结束时间中包含敏感词汇:" + SensitiveWordUtils.getSensitiveWord(applicationWechartNo, 1) + "，请检查后再保存";
        }
        
        if (StringUtils.isNotBlank(investWechartNo) && investWechartNo.length() > 100) {
            return "邀请人微信号值超长，允许输入的最大长度为：100字符";
        }
        
        if (SensitiveWordUtils.isContaintSensitiveWord(investWechartNo, 1)) {
            return "邀请人微信号中包含敏感词汇:" + SensitiveWordUtils.getSensitiveWord(investWechartNo, 1) + "，请检查后再保存";
        }
        
        if (StringUtils.isNotBlank(createUser) && createUser.length() > 50) {
            return "发布人值超长，允许输入的最大长度为：50字符";
        }
        
        if (SensitiveWordUtils.isContaintSensitiveWord(createUser, 1)) {
            return "发布人中包含敏感词汇:" + SensitiveWordUtils.getSensitiveWord(createUser, 1) + "，请检查后再保存";
        }
        
        if (StringUtils.isBlank(loanApplicationId)) {
            return "借款申请ID不能为空";
        }
        
        if (StringUtils.isBlank(platformName)) {
            return "项目名称不能为空";
        }
        
        if (StringUtils.isBlank(applicationName)) {
            return "成交金额不能为空";
        }
        if (processStatus == null) {
            return "处理状态（1，已申请，2已联系，3，借款成功，4、借款失败，5、已返利）不能为空";
        }
        
        if (StringUtils.isBlank(createUser)) {
            return "发布人不能为空";
        }
        if (updateTime == null) {
            return "更新时间不能为空";
        }
        if (createTime == null) {
            return "创建时间不能为空";
        }
        if (dataStatus == null) {
            return "状态：0默认，1管理员删除，2用户删除不能为空";
        }
        
        return null;
    }
}
